iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
自我挑戰組

拯救混亂數據:30 天 Python 輕量級 ETL 與電商關聯資料分析系列 第 4

[Day 04] 數據健康檢查:不急著畫圖,先用 EDA 摸清「訂單主表」的底細

  • 分享至 

  • xImage
  •  

初探資料,我們到底該先看什麼?

前言 :
昨天我們成功用一個字典 olist_db 把 9 張 CSV 表格優雅地收納進記憶體中。
現在資料準備就緒,面對這數據,第一步到底該如何做什麼?
很多新手的直覺是立刻匯入視覺化套件,想一口氣拉出每個月的銷售趨勢圖。

但我想在真實的業界當中如果盲目出圖往往是災難的開始。
在畫圖之前,我覺得更應該先摸清資料的「底細」,否則很容易踩到隱藏的地雷:

> 型態錯誤: 如果日期被存成了單純的字串(String),連最基本的「依月份群組」都做不到,圖表直接報錯。

> 邏輯空值: 如果為了畫圖而直接粗暴地略過空值(NaN),可能會不小心刪掉一堆有價值的特殊訂單,導致分析結果失真。

因為,在EDA(Exploratory Data Analysis, 簡稱 EDA(探索性資料分析))的起手式不是只單畫出圖表,而是先做"檢查"。
由於是 9 張表中的訂單主表 (orders) 是串聯所有邏輯的骨架,今天我們就從這來開刀!


步驟一:呼叫訂單主表,檢視資料輪廓

昨天把資料都存在 olist_db 字典裡,現在讓我們去把訂單主表單獨抓出來,賦予它一個專屬變數,並印出前五筆看看長相:

# 從字典中取出訂單主表
orders = olist_db['olist_orders_dataset']

# 檢視前五筆資料,掌握大致樣貌
orders.head()

實戰圖片 如下

https://ithelp.ithome.com.tw/upload/images/20260911/20136155wIEZma1t6R.png

從印出的結果能看到,
這張表紀錄了每筆訂單(order_id)對應的客戶(customer_id)、訂單狀態(order_status),
以及一連串關鍵的時間點(下單、付款、發貨、送達)。


步驟二:掌握資料規模與型態 (info)

知道長什麼樣子後,我們要問:這張表有多大?
每個欄位儲存了什麼格式的資料?
在 Pandas 中,最實用的初步健檢函式就是 info():

# 檢視資料規模、欄位型態與非空值數量
orders.info()

實作區 :

https://ithelp.ithome.com.tw/upload/images/20260911/20136155iQZ1xCwLYG.png

仔細看執行結果的 Dtype(資料型態)欄位,我們馬上抓到第一個地雷!

這張表裡有 5 個與時間相關的欄位(例如:order_purchase_timestamp 購買時間),
但它們目前的型態全部都是 object(在 Pandas 中通常代表字串 String),而不是時間型態 datetime64。
這意味著電腦現在把它們當作純文字,如果不做轉換,我們後續完全無法計算「物流出貨究竟花了幾天」。


步驟三:帶著 -"邏輯"- 檢查空值 (Missing Values)

看完型態後,我們要來盤點「空值(NaN)」。我們用一行程式碼,快速統計每個欄位有多少個破洞:

# 統計每個欄位的空值數量
orders.isnull().sum()

實作區 :

https://ithelp.ithome.com.tw/upload/images/20260911/201361553lVRJeiS6F.png

執行後你會發現一個有趣的現象:

order_id、order_status 這幾個核心欄位都是 0 個空值。

但是,order_delivered_customer_date (送達顧客時間) 卻出現了 2965 個空值!

這時候不要急於想著下 dropna() 把這 2965 筆資料刪掉!

思考在真實的網購情境下:
只要訂單中途被「取消」,包裹沒出貨,自然就不會有「送達時間」。
那這些欄位的空著不是因為系統出錯,而是這件事「本身就沒發生」。
保留這些合理的空值,正是分析真實數據的關鍵!


今天先幫「訂單主表」做了一次全身檢查,並揪出兩個大問題:

1.假的時間: 時間欄位被當成一般字串儲存,無法計算天數,必須校正。
2.合理的留白 (空值): 缺少物流時間的訂單,必須根據它的「訂單狀態」來決定去留。

找出問題後就簡單了!
明天我們將正式動手,運用 Pandas 來處理這兩種麻煩,從原始資料打磨成可隨時分析的乾淨數據。
那我們 Day 5 見!


上一篇
[Day 03] ETL 起手式:開發環境與 Pandas 批次讀取實戰
系列文
拯救混亂數據:30 天 Python 輕量級 ETL 與電商關聯資料分析4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言